package cemp.util;

import cemp.redis.util.RedisUtils;
import cemp.service.FetchDataService;
import cemp.service.StockAllService;
import cemp.service.StockPlateService;
import com.alibaba.cloud.commons.lang.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;

//@Component
@Slf4j
public class ScheduleTask {

    private final String SD_LOCK_CURRENT_STOCK = "lock.shedule.current.stocks";
    private final String SD_LOCK_KPI_STOCK = "lock.shedule.kpi.stocks";
    private final String SD_LOCK_INIT_STOCK = "lock.shedule.init.stocks";
    private final String SD_LOCK_INIT_PLATE = "lock.shedule.init.plates";
    private final String SD_LOCK_INIT_PLATE_STOCKS = "lock.shedule.init.platestocks";

    @Autowired
    FetchDataService fetchDataService;
    @Autowired
    StockPlateService stockPlateService;
    @Autowired
    StockAllService stockAllService;
    @Autowired
    RedisUtils redisUtils;

    /**
     * 每日收盘后 统计个股当天实时数据
     * tasks ->mq -> sh/sz
     * 每天17:00
     */
    @Scheduled(cron = "0 0 16 1/1 * ?")
    public void currentDataDelay() {
        log.info("每日收盘后 统计个股当天实时数据======>任务开始");
        if(StockUtils.isOpenToday()){
            log.info("每日收盘后 统计个股当天实时数据======>任务执行");
            //获取锁
            boolean getLock = redisUtils.getLock(SD_LOCK_CURRENT_STOCK,60L);
            if(getLock){
                log.info("每日收盘后 统计个股当天实时数据======>开始分发任务");
                // 分发任务
                fetchDataService.staCurrentDelay(StringUtils.trim(DateUtil.getDatePrefix()),null);
            }

        }
        log.info("每日收盘后 统计个股当天实时数据======>任务完成");
    }

    /**
     * 每日收盘后 统计个股当天kpi数据 -本地统计
     * tasks ->mq -> sh/sz
     * 每天19:00
     */
    @Scheduled(cron = "0 0 18 1/1 * ?")
    public void kpiDataDelay() {
        log.info("每日收盘后 统计个股当天kpi数据 -本地统计======>任务开始");
        if(StockUtils.isOpenToday()){
            log.info("每日收盘后 统计个股当天kpi数据 -本地统计======>任务执行");
            //获取锁
            boolean getLock = redisUtils.getLock(SD_LOCK_KPI_STOCK, 60L);
            if(getLock){
                log.info("每日收盘后 统计个股当天kpi数据 -本地统计======>开始分发任务");
                // 分发任务
                fetchDataService.staKpiDelay(StringUtils.trim(DateUtil.getDatePrefix()), null);
            }
        }
        log.info("每日收盘后 统计个股当天kpi数据 -本地统计======>任务完成");
    }

    /**
     * 每周1 更新股票
     * 每周一 1:00
     */
//    @Scheduled(cron = "* * 1 * * 1#1")
    public void initStockAll() {
        log.info("每周1 更新股票======>任务开始");
        //获取锁
        redisUtils.getLock(SD_LOCK_INIT_STOCK, 3600L);
        stockAllService.init();
        log.info("每周1 更新股票======>任务完成");
    }

    /**
     * 每周1 更新板块
     * 每周一 3:00
     */
//    @Scheduled(cron = "* * 3 * * 1#1")
    public void initPlates() {
        log.info("每周1 更新板块======>任务开始");
        //获取锁
        redisUtils.getLock(SD_LOCK_INIT_PLATE, 3600L);
        stockPlateService.init();
        log.info("每周1 更新板块======>任务完成");
    }

    /**
     * 每周1 更新板块-股票
     * 每周一 5:00
     */
//    @Scheduled(cron = "* * 5 * * 1#1")
    public void initStockPlates() {
        log.info("每周1 更新板块-股票======>任务开始");
        //获取锁
        redisUtils.getLock(SD_LOCK_INIT_PLATE_STOCKS, 3600L);
        fetchDataService.handlePlateStocks();
        log.info("每周1 更新板块-股票======>任务完成");
    }


}
